From a423930e0d6de08e14864579c58fbe81a735f600 Mon Sep 17 00:00:00 2001 From: Alex Williamson Date: Mon, 30 Jul 2007 18:14:29 -0600 Subject: [PATCH] [IA64][MINIOS] PKR support - adds optimization feature for region 7 identity mapping - adds protection keys to region 5 and region 7 addresses, may be used for testing the hypervisor protection key support Signed-off-by: Dietmar Hahn --- extras/mini-os/arch/ia64/common.c | 21 +++++++++++++++++++- extras/mini-os/arch/ia64/ia64.S | 14 +++++++++++-- extras/mini-os/arch/ia64/ivt.S | 4 ++-- extras/mini-os/include/ia64/hypercall-ia64.h | 10 ++++++++++ extras/mini-os/include/ia64/ia64_cpu.h | 2 +- extras/mini-os/include/ia64/page.h | 4 ++++ 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/extras/mini-os/arch/ia64/common.c b/extras/mini-os/arch/ia64/common.c index 13416d9542..cd4cec1e20 100644 --- a/extras/mini-os/arch/ia64/common.c +++ b/extras/mini-os/arch/ia64/common.c @@ -103,7 +103,8 @@ map_pal_code(void) */ ia64_ptc_l(machineFwG.ia64_pal_base, PTE_PS_16K); ia64_write_itr_i(&pte, IA64_TR_PAL, - (uint64_t) machineFwG.ia64_pal_base, PTE_PS_16K, 0); + (uint64_t)machineFwG.ia64_pal_base, + PTE_PS_16K, IA64_KEY_REG7); xen_set_virtual_psr_ic(1); } @@ -180,6 +181,21 @@ init_boot_params(void) bootverbose = 1; } +static void +set_opt_feature(void) +{ + struct xen_ia64_opt_feature optf; + + optf.cmd = XEN_IA64_OPTF_IDENT_MAP_REG7; + optf.on = XEN_IA64_OPTF_ON; + optf.pgprot = ((1 << PTE_OFF_P) | (1 << PTE_OFF_A) | (1 << PTE_OFF_D) | + (PTE_MA_WB << PTE_OFF_MA) | + (PTE_PL_KERN << PTE_OFF_PL) | + (PTE_AR_RW << PTE_OFF_AR)); + optf.key = IA64_KEY_REG7; + HYPERVISOR_opt_feature(&optf); +} + void arch_init(start_info_t *si) { @@ -213,6 +229,9 @@ arch_init(start_info_t *si) printk("efi_get_time() failed\n"); registerCallback(); + + set_opt_feature(); + initialized = 1; } diff --git a/extras/mini-os/arch/ia64/ia64.S b/extras/mini-os/arch/ia64/ia64.S index 4374c750e7..7ea9433199 100644 --- a/extras/mini-os/arch/ia64/ia64.S +++ b/extras/mini-os/arch/ia64/ia64.S @@ -101,11 +101,21 @@ ENTRY(_start) ;; mov rr[r3]=r2 ;; - + /* + * Setup protection keys for region 5 and 7. + */ + mov r2=(IA64_KEY_REG5 << IA64_PKR_KEY) | IA64_PKR_VALID + mov r3=(IA64_KEY_REG7 << IA64_PKR_KEY) | IA64_PKR_VALID + mov r14=0x1 + ;; + mov pkr[r0]=r2 /* Region 5 */ + mov pkr[r14]=r3 /* Region 7 */ + ;; /* * Now pin mappings into the TLB for kernel text and data */ - mov r18=KERNEL_TR_PAGE_SIZE<